//package com.feixiang.springbootinit.manager;
//import com.feixiang.springbootinit.wechat.SessionArchiveChatDataDecryptCallable;
//
//import java.util.concurrent.*;
//import java.util.concurrent.atomic.AtomicInteger;
//
//public class SessionArchiveThreadPoolManager {
//    private static volatile ThreadPoolExecutor threadPool;
//    private static final int STACK_SIZE = 50 * 1024 * 1024; // 50MB栈大小
//    private static final int QUEUE_CAPACITY = 4096;
//
//    private SessionArchiveThreadPoolManager() {
//        // 私有构造器防止实例化
//    }
//
//    public static synchronized ThreadPoolExecutor getThreadPool() {
//        if (threadPool == null) {
//            // 使用有界队列防止内存溢出
//            BlockingQueue<Runnable> workQueue = new ArrayBlockingQueue<>(QUEUE_CAPACITY);
//            // 自定义线程工厂，设置线程栈大小
//            ThreadFactory threadFactory = new SessionArchiveThreadFactory();
//
//            // 拒绝策略：当队列满时抛出异常
//            RejectedExecutionHandler handler = new ThreadPoolExecutor.AbortPolicy();
//
//            // 核心线程和最大线程设置为1，确保串行执行
//            threadPool = new ThreadPoolExecutor(
//                    1,
//                    1,
//                    50,
//                    TimeUnit.MINUTES,
//                    workQueue,
//                    threadFactory,
//                    handler
//            );
//        }
//        return threadPool;
//    }
//
//    public static Future<String> submitTask(SessionArchiveChatData encryptData, Long sdk) {
//        SessionArchiveChatDataDecryptCallable task =
//                new SessionArchiveChatDataDecryptCallable(encryptData, sdk);
//        return getThreadPool().submit(task);
//    }
//    public static void shutdown() {
//        if (threadPool != null) {
//            //使用线程池的目的，是由于企业微信的sdk，需要设置线程栈大小  但是统一调大了太耗费内存
//            threadPool.shutdown();
//            try {
//                if (!threadPool.awaitTermination(60, TimeUnit.SECONDS)) {
//                    threadPool.shutdownNow();
//                }
//            } catch (InterruptedException e) {
//                threadPool.shutdownNow();
//                Thread.currentThread().interrupt();
//            }
//        }
//    }
//    // 自定义线程工厂
//    private static class SessionArchiveThreadFactory implements ThreadFactory {
//        private final AtomicInteger threadNumber = new AtomicInteger(1);
//
//        @Override
//        public Thread newThread(Runnable r) {
//            Thread thread = new Thread(
//                    null,
//                    r,
//                    "qw_session_archive_" + threadNumber.getAndIncrement(),
//                    STACK_SIZE
//            );
//            thread.setDaemon(false);
//            thread.setPriority(Thread.NORM_PRIORITY);
//            return thread;
//        }
//    }
//}
